package com.zds.mydatabinding.rxjava;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.zds.mydatabinding.R;

/*import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Func0;*/

/**
 * Rxjava的核心就是数据异步
 * 简单的说：
 * 谁来来服务提供数据：
 * 谁来负责读取数据：
 *
 * 他的优点就是逻辑越复杂、代码依然保持整洁
 *
 * 务必弄懂者几个概念：
 * Observable：发射源，英文释义“可观察的”，在观察者模式中称为“被观察者”或“可观察对象”；
 * Observer：接收源，英文释义“观察者”，没错！就是观察者模式中的“观察者”，可接收Observable、Subject发射的数据；
 * Subject：Subject是一个比较特殊的对象，既可充当发射源，也可充当接收源，为避免初学者被混淆，本章将不对Subject做过多的解释和使用，重点放在Observable和Observer上，先把最基本方法的使用学会，后面再学其他的都不是什么问题；
 * Subscriber：“订阅者”，也是接收源，那它跟Observer有什么区别呢？Subscriber实现了Observer接口，比Observer多了一个最重要的方法unsubscribe( )，用来取消订阅，当你不再想接收数据了，可以调用unsubscribe( )方法停止接收，Observer 在 subscribe() 过程中,最终也会被转换成 Subscriber 对象，一般情况下，建议使用Subscriber作为接收源；
 * Subscription ：Observable调用subscribe( )方法返回的对象，同样有unsubscribe( )方法，可以用来取消订阅事件；
 * Action0：RxJava中的一个接口，它只有一个无参call（）方法，且无返回值，同样还有Action1，Action2...Action9等，Action1封装了含有 1 个参的call（）方法，即call（T t），Action2封装了含有 2 个参数的call方法，即call（T1 t1，T2 t2），以此类推；
 * Func0：与Action0非常相似，也有call（）方法，但是它是有返回值的，同样也有Func0、Func1...Func9;
 */

public class RxjavaActivity extends AppCompatActivity {
    private static final String TAG = "RxjavaActivity";
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rxjava);
        tv= (TextView) findViewById(R.id.tv_show);
       // getData();
    }

   /* public void getData(){
        *//*
        * Observable: 被观察者 的创建方式
        * create()
        * just()
        * from()
        * defer()
        * interval()
        * range()
        * timer()
        * repeat()
        * *//*

        //create()方式
        Observable<String> sender = Observable.create(new Observable.OnSubscribe<String>(){

            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("hahahahah");
            }
        });

        //just()方式
        Observable<String> sJust = Observable.just("just1","just2");//一次发送

        *//**
         *  Observer 观察者
         *
         *//*

        Observer<String> observer = new Observer<String>() {
            @Override
            public void onNext(String s) { //读取数据
                Log.d(TAG, "Item: " + s);
                tv.setText(s);
            }
            @Override
            public void onCompleted() {
                Log.d(TAG, "Completed!");
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, "Error!");
            }
        };

        sJust.subscribe(observer);//Observable和Obsever 关联


        //...等等还有其他方式
    }*/

  /*  public void test(){
        Observer<String> observer = new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {

            }
        };


        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {

            }
        });

        observable.subscribe(observer);
    }*/

}
